package net.maku.events.service;

import net.maku.events.query.WalkUserSnapshotQuery;
import net.maku.events.vo.*;
import net.maku.framework.common.utils.PageResult;
import net.maku.framework.common.utils.Result;
import net.maku.framework.mybatis.service.BaseService;
import net.maku.events.query.ActivityBriskWalkQuery;
import net.maku.events.entity.ActivityBriskWalkEntity;

import java.util.List;
import java.util.Map;

/**
 * 健步走活动
 *
 * @author 阿沐 babamu@126.com
 * @since 1.0.0 2025-03-22
 */
public interface ActivityBriskWalkService extends BaseService<ActivityBriskWalkEntity> {

    /**
     * 获取首页推荐活动
     *
     * @return 结果
     */
    List<ActivityBaseVO> topActivity();

    /**
     * 分页查看用户可参加的健步走数
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<ActivityBriskWalkVO> page(ActivityBriskWalkQuery query);

    /**
     * 获取可参与的组织数组
     *
     * @param id 活动id
     * @return 结果
     */
    Map<String, Object> getJoinOrgIdList(Long id);

    /**
     * 参与活动
     *
     * @param id 主键
     */
    void joinActivity(Long id);

    /**
     * 游客用户参与活动
     *
     * @param joinActivityVO 用户所填信息
     */
    void joinActivityByNewUser(NewUserJoinActivityVO joinActivityVO);

    /**
     * 获取用户步数
     *
     * @param request 请求对象
     */
    Map<String, Object> getRunCount(WeRunRequestVO request);

    /**
     * 解锁站点
     *
     * @param id     健步走id
     * @param siteId 站点id
     */
    void unlockSite(Long id, Long siteId);

    /**
     * 查看健步走详情
     *
     * @param id 主键
     * @return 结果
     */
    ActivityBriskWalkVO getInfoById(Long id) throws InterruptedException;

    /**
     * 设置参与人数与步数及计算公里数
     *
     * @param id
     * @return
     */
    ActivityBriskWalkVO division(Long id);

    /**
     * 设置参与人数与步数及计算公里数
     *
     * @param id
     * @return
     */
    ActivityBriskWalkVO setJoinUserAndStep(Long id);

    /**
     * 设置累计积分
     *
     * @param id
     * @return
     */
    ActivityBriskWalkVO setActivityPoints(Long id);

    /**
     * 查看竞赛地图
     *
     * @param id 健步走id
     * @return 节点
     */
    List<ActivityBriskWalkSiteVO> viewCompetitionMap(Long id);

    /**
     * 健步走发布随手拍
     *
     * @param vo 随手拍对象
     */
    double saveUserSnapshot(BriskWalkSnapshotVO vo);

    /**
     * 健步走答题
     *
     * @param vo 答题
     */
    double answer(BriskWalkAnswerQuestionVO vo);

    /**
     * 每日答题获取题目
     *
     * @param walkFeatureId 活动关联表id
     * @return 题目
     */
    List<ActivityContestQuestionVO> everydayQuestion(Long walkFeatureId);

    /**
     * 分页查询随手拍活动
     *
     * @param query 查询对象
     * @return 结果
     */
    PageResult<UserSnapshotVO> lookSnapshot(WalkUserSnapshotQuery query);


    /**
     * 我的卡片
     *
     * @param briskWalkId 健步走id
     * @return 结果
     */
    SelfCardVO getSelfCard(Long briskWalkId);

    /**
     * 获取每日答题已答
     *
     * @param walkFeatureId 活动关联id
     * @return 结果
     */
    List<AlreadyAnswerQuestionBankVO> alreadyAnswer(Long walkFeatureId);

    void autoLightLastStationTest();

    Result<Object> unlockFixedSite(String mobile, String siteNumber);
}